RxJava-তে Subscription এবং Disposable হল Observable এবং Observer-এর মধ্যে সম্পর্ক পরিচালনার জন্য ব্যবহৃত গুরুত্বপূর্ণ উপাদান।
Subscription:
Subscription হল Observable এবং Observer-এর সংযোগ। যখন একটি Observer একটি Observable-এ subscribe করে, তখন Subscription তৈরি হয়। এটি data stream গ্রহণ শুরু করার প্রক্রিয়া নির্দেশ করে।
Disposable:
Disposable হল একটি interface যা Subscription বন্ধ বা বাতিল করার জন্য ব্যবহৃত হয়। এটি memory leak এড়াতে ব্যবহৃত হয়, বিশেষ করে যখন Observable অনির্দিষ্টকালের জন্য data emit করতে পারে।
উদাহরণ:
নিচের উদাহরণে Subscription এবং Disposable এর ব্যবহার দেখানো হয়েছে:
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.disposables.Disposable;
public class RxJavaSubscriptionExample {
public static void main(String[] args) {
// Create an Observable
Observable<String> observable = Observable.create(emitter -> {
emitter.onNext("Item 1");
emitter.onNext("Item 2");
emitter.onNext("Item 3");
emitter.onComplete();
});
// Subscribe to the Observable and get the Disposable
Disposable disposable = observable.subscribe(
item -> System.out.println("Received: " + item), // onNext
error -> System.err.println("Error: " + error), // onError
() -> System.out.println("Stream complete!") // onComplete
);
// Check if the subscription is still active
if (!disposable.isDisposed()) {
System.out.println("Subscription is active.");
}
// Dispose the subscription
disposable.dispose();
// Verify if the subscription has been disposed
if (disposable.isDisposed()) {
System.out.println("Subscription has been disposed.");
}
}
}
কোড ব্যাখ্যা:
- Observable তৈরি করা:
- Observable data emit করছে (
onNext) এবং শেষে stream বন্ধ করছে (onComplete)।
- Observable data emit করছে (
- Subscription:
observable.subscribe()-এ Observer এর জন্যonNext,onError, এবংonCompleteহ্যান্ডলার পাস করা হয়েছে।
- Disposable ব্যবহার:
Disposable disposable = observable.subscribe()ডিভাইসটি সংরক্ষণ করছে।disposable.dispose()এর মাধ্যমে subscription বন্ধ করা হয়েছে।isDisposed()এর মাধ্যমে subscription বন্ধ হয়েছে কিনা তা যাচাই করা হয়েছে।
Disposable-এর গুরুত্বপূর্ণ ব্যবহার:
- Memory Leak এড়ানো:
- Long-running Observables-এ subscription বন্ধ না করলে memory leak হতে পারে। Disposable ব্যবহার করে এটি এড়ানো যায়।
- Android Context Management:
- Activity বা Fragment ধ্বংস হওয়ার সময় (e.g., configuration change) subscription বন্ধ করার জন্য Disposable ব্যবহার করা হয়।
Android Context-এ Disposable-এর উদাহরণ:
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.disposables.CompositeDisposable;
public class RxJavaAndroidExample {
private CompositeDisposable compositeDisposable = new CompositeDisposable();
public void fetchData() {
Observable<String> observable = Observable.just("Data 1", "Data 2", "Data 3");
// Add subscription to CompositeDisposable
compositeDisposable.add(
observable.subscribe(
item -> System.out.println("Received: " + item),
error -> System.err.println("Error: " + error),
() -> System.out.println("Stream complete!")
)
);
}
public void onDestroy() {
// Dispose all subscriptions when Activity or Fragment is destroyed
compositeDisposable.clear();
}
}
কোড ব্যাখ্যা:
- CompositeDisposable:
- একাধিক Disposable একত্রে পরিচালনা করতে ব্যবহৃত হয়।
- onDestroy():
- Activity বা Fragment ধ্বংস হওয়ার সময়
compositeDisposable.clear()ডাকা হয়, যা সমস্ত subscription বন্ধ করে।
- Activity বা Fragment ধ্বংস হওয়ার সময়
সারমর্ম:
- Subscription: Observable থেকে data stream পাওয়ার সংযোগ।
- Disposable: Subscription বন্ধ করার পদ্ধতি।
- CompositeDisposable: একাধিক subscription একত্রে পরিচালনা করার জন্য ব্যবহৃত।
Disposable এবং CompositeDisposable সঠিকভাবে ব্যবহার করা না হলে memory leak-এর ঝুঁকি থেকে যায়। তাই এগুলো ব্যবহারে সতর্ক থাকা উচিত।
Read more